'use strict'
const path = require('path')
const resolve = dir => path.join(__dirname, dir)
// 生产环境判断
const IS_PROD = process.env.VUE_APP_ENV === 'production'

module.exports = {
  // publicPath默认是'/', 当路由使用历史模式时，如果应用在根目录下，则使用默认配置就行
  // 如果使用历史模式且应用服务在 /app/ 下，publicPath就应该配置为'/app/'
  // 且需要配置vue-router的base选项，const router = new VueRouter({ base: '/aaa/' })
  publicPath: './',
  productionSourceMap: false,
  css: {
    extract: IS_PROD, // 是否将组件中的 CSS 提取至一个独立的 CSS 文件中 (而不是动态注入到 JavaScript 中的 inline 代码)。
    sourceMap: false
  },
  chainWebpack: config => {
    // 别名 alias
    config.resolve.alias
      .set('~', resolve('src')) // 默认为@

    config.optimization.splitChunks({
      chunks: 'all',
      cacheGroups: {
        // cacheGroups 下可以可以配置多个组，每个组根据test设置条件，符合test条件的模块
        commons: {
          name: 'chunk-commons',
          test: resolve('src/components'),
          minChunks: 3, //  被至少用三次以上打包分离
          priority: 5, // 优先级
          reuseExistingChunk: true // 表示是否使用已有的 chunk，如果为 true 则表示如果当前的 chunk 包含的模块已经被抽取出去了，那么将不会重新生成新的。
        },
        node_vendors: {
          name: 'chunk-libs',
          chunks: 'initial', // 只打包初始时依赖的第三方
          test: /[\\/]node_modules[\\/]/,
          priority: 10
        },
        element: {
          name: 'chunk-element', // 单独将 elementUi 拆包
          priority: 20, // 数字大权重到，满足多个 cacheGroups 的条件时候分到权重高的
          test: /[\\/]node_modules[\\/]_?element-ui(.*)/
        }
      }
    })
  }
}
